//
// Created by A4-28 on 2020/10/15.
//

namespace WF {
    enum TextureType {
        NONE = 0,
        /** The texture is combined with the result of the diffuse
         *  lighting equation.
         */
        DIFFUSE = 1,

        /** The texture is combined with the result of the specular
         *  lighting equation.
         */
        SPECULAR = 2,
        /** The texture is combined with the result of the ambient
         *  lighting equation.
         */
        AMBIENT = 3,
        /** The texture is added to the result of the lighting
         *  calculation. It isn't influenced by incoming light.
         */
        EMISSIVE = 4,
        /** The texture is a height map.
         *
         *  By convention, higher gray-scale values stand for
         *  higher elevations from the base height.
         */
        HEIGHT = 5,
        /** The texture is a (tangent space) normal-map.
         *
         *  Again, there are several conventions for tangent-space
         *  normal maps. Assimp does (intentionally) not
         *  distinguish here.
         */
        NORMALS = 6,
        /** The texture defines the glossiness of the material.
         *
         *  The glossiness is in fact the exponent of the specular
         *  (phong) lighting equation. Usually there is a conversion
         *  function defined to map the linear color values in the
         *  texture to a suitable exponent. Have fun.
        */
        SHININESS = 7,

        /** The texture defines per-pixel opacity.
         *
         *  Usually 'white' means opaque and 'black' means
         *  'transparency'. Or quite the opposite. Have fun.
        */
        OPACITY = 8,

        /** Displacement texture
         *
         *  The exact purpose and format is application-dependent.
         *  Higher color values stand for higher vertex displacements.
        */
        DISPLACEMENT = 9,

        /** Lightmap texture (aka Ambient Occlusion)
         *
         *  Both 'Lightmaps' and dedicated 'ambient occlusion maps' are
         *  covered by this material property. The texture contains a
         *  scaling value for the final color value of a pixel. Its
         *  intensity is not affected by incoming light.
        */
        LIGHTMAP = 10,

        /** Reflection texture
         *
         * Contains the color of a perfect mirror reflection.
         * Rarely used, almost never for real-time applications.
        */
        REFLECTION = 11,

        /** PBR Materials
         * PBR definitions from maya and other modelling packages now use this standard.
         * This was originally introduced around 2012.
         * Support for this is in game engines like Godot, Unreal or Unity3D.
         * Modelling packages which use this are very common now.
         */
        PBR_BASE_COLOR = 12,
        PBR_NORMAL_CAMERA = 13,
        PBR_EMISSION_COLOR = 14,
        PBR_METALNESS = 15,
        PBR_DIFFUSE_ROUGHNESS = 16,
        PBR_AMBIENT_OCCLUSION = 17,

        /** Unknown texture
         *
         *  A texture reference that does not match any of the definitions
         *  above is considered to be 'unknown'. It is still imported,
         *  but is excluded from any further post-processing.
        */
        UNKNOWN = 18,
    };
}